package cn.mrlong.base.utils

import java.lang.Exception
import java.text.SimpleDateFormat
import java.util.*


/**
 * 作者：BINGO
 * 时间：2021/03/29 10:57
 */
class TimeUtils private constructor() {
    public enum class TimeStyle(val style: String) {
        YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"),//时间类型
        YYYY_MM_DD_HH_MM("yyyy-MM-dd HH:mm"),//没有秒的时间类型
        YYYY_MM_DD("yyyy-MM-dd"),//日期
        YYYY_MM("yyyy-MM"),//月份
        HH_MM_SS("HH:mm:ss"),//获取时间
        HH_MM("HH:mm"),//获取时间
        MM_DD_HH_MM_SS("MM-dd HH:mm:ss"),//没有年的时间类型
        MM_DD_HH_MM("MM-dd HH:mm"),//没有年 秒的时间类型
    }

    companion object {
        /**
         * 格式化时间  默认返回当前的时间全格式
         *
         * @param millTime
         * @param format
         * @return
         */
        fun formatTime(
            millTime: Long = System.currentTimeMillis(),
            format: TimeStyle = TimeStyle.YYYY_MM_DD_HH_MM_SS
        ): String {
            var formatTime = ""
            if (millTime > 0) {
                val sdf = SimpleDateFormat(format.style)
                val date = Date()
                date.time = millTime
                formatTime = sdf.format(date)
            }
            return formatTime
        }

        /**
         * 反格式化
         * @param formatString String
         * @param format TimeStyle
         * @return Long?
         */
        fun unFormat(
            formatString: String,
            format: TimeStyle = TimeStyle.YYYY_MM_DD_HH_MM_SS
        ): Long? {
            try {
                val simpleDateFormat = SimpleDateFormat(format.style)
                val time = simpleDateFormat.parse(formatString).time
                return time
            } catch (e: Exception) {
                e.printStackTrace()
            }
            return null
        }

        /**
         * 获取今天的的日期
         *
         * @return
         */
        fun getTodayDate(): String? {
            //2017-07-17 13:42:42
            val date = formatTime(System.currentTimeMillis(), TimeStyle.YYYY_MM_DD)
            val time = " 23:59:59"
            return "$date $time"
        }

        /**
         * 获取昨天
         *
         * @param i 当i为正数的时候 为明天及前退 为负数的时候为昨天及后退
         */
        fun getDate(i: Int): String? {
            var date = Date() //取时间
            val calendar: Calendar = GregorianCalendar()
            calendar.time = date
            calendar.add(Calendar.DATE, i) //把日期往后增加一天.整数往后推,负数往前移动
            date = calendar.time //这个时间就是日期往后推一天的结果
            val formatter = SimpleDateFormat("yyyy-MM-dd")
            val dateString = formatter.format(date)
            return dateString + " 00:00:00"
        }
    }
}